/**
 * 配置Schema类型定义
 * 定义了动态配置系统的核心数据结构
 */

// === 字段类型定义 ===
export type FieldType = 
  | 'string' 
  | 'number' 
  | 'boolean' 
  | 'select' 
  | 'multiSelect'
  | 'array' 
  | 'object' 
  | 'json'
  | 'textarea'
  | 'color'
  | 'file'
  | 'date'
  | 'range'
  | 'tags'
  | 'skillSelector'
  | 'attributeEditor'
  | 'qualityRange'
  | 'emoji'

// === 字段验证规则 ===
export interface ValidationRule {
  type: 'required' | 'min' | 'max' | 'pattern' | 'custom'
  value?: any
  message: string
  validator?: string // 自定义验证函数名
}

// === 字段选项 ===
export interface FieldOption {
  label: string
  value: any
  disabled?: boolean
  description?: string
  icon?: string
}

// === 字段元数据 ===
export interface FieldSchema {
  /** 字段键名 */
  key: string
  /** 显示标签 */
  label: string
  /** 字段类型 */
  type: FieldType
  /** 是否必填 */
  required?: boolean
  /** 默认值 */
  defaultValue?: any
  /** 字段描述 */
  description?: string
  /** 占位符 */
  placeholder?: string
  /** 验证规则 */
  rules?: ValidationRule[]
  /** 选项列表（select/multiSelect类型使用） */
  options?: FieldOption[]
  /** 选项数据源（动态选项） */
  optionsSource?: string
  /** 最小值（number/range类型） */
  min?: number
  /** 最大值（number/range类型） */
  max?: number
  /** 步长（number类型） */
  step?: number
  /** 数组项的schema（array类型使用） */
  itemSchema?: FieldSchema
  /** 对象属性的schema（object类型使用） */
  properties?: Record<string, FieldSchema>
  /** 是否可见 */
  visible?: boolean | string // 可以是表达式
  /** 是否禁用 */
  disabled?: boolean | string
  /** 字段分组 */
  group?: string
  /** 排序权重 */
  order?: number
  /** 自定义渲染组件 */
  component?: string
  /** 组件属性 */
  componentProps?: Record<string, any>
  /** 依赖字段 */
  dependencies?: string[]
  /** 条件显示逻辑 */
  showWhen?: {
    field: string
    operator: '==' | '!=' | '>' | '<' | 'contains' | 'in'
    value: any
  }[]
}

// === 配置表单分组 ===
export interface FormGroup {
  key: string
  label: string
  description?: string
  icon?: string
  order?: number
  collapsed?: boolean
}

// === 配置Schema ===
export interface ConfigSchema {
  /** Schema版本 */
  version: string
  /** 配置类型名称 */
  type: string
  /** 配置名称 */
  name: string
  /** 配置描述 */
  description: string
  /** 字段列表 */
  fields: FieldSchema[]
  /** 分组配置 */
  groups?: FormGroup[]
  /** 全局验证规则 */
  globalValidation?: ValidationRule[]
  /** 支持的操作 */
  actions?: {
    create?: boolean
    edit?: boolean
    delete?: boolean
    duplicate?: boolean
    export?: boolean
    import?: boolean
  }
  /** 列表显示配置 */
  listConfig?: {
    /** 主要显示字段 */
    primaryField: string
    /** 次要显示字段 */
    secondaryFields: string[]
    /** 状态字段 */
    statusField?: string
    /** 搜索字段 */
    searchFields: string[]
    /** 排序字段 */
    sortFields: string[]
  }
  /** 预览配置 */
  previewConfig?: {
    /** 预览模板 */
    template: string
    /** 预览字段 */
    fields: string[]
  }
}

// === 验证结果 ===
export interface ValidationResult {
  isValid: boolean
  errors: ValidationError[]
  warnings: ValidationWarning[]
  validatedCount: number
}

export interface ValidationError {
  id: string
  field?: string
  message: string
  severity: 'error' | 'warning' | 'info'
}

export interface ValidationWarning extends ValidationError {
  suggestion?: string
}
